#ifndef __SHOWIMAGE_H
#define __SHOWIMAGE_H


#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <syslog.h>
#include <errno.h>
#include <linux/input.h>

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <stdbool.h>

#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>

#include <dirent.h>

// #include "PolarisTypedef.h"
#include "jpeglib.h"


struct imginfo
{
	int width;
	int height;
	int pixel_size;
};


// bmp图片的结构体信息
// 优化为更具描述性的命名，代表 BMP 文件头
struct BMPFileHeader
{
    int16_t fileType;  // 更明确表示这是文件类型, 对于 BMP 文件，它通常被设置为 0x4D42（即 "BM" 的十六进制表示）
    int32_t fileSize;  // 明确表示是文件大小, 以字节为单位
    int16_t reserved1;
    int16_t reserved2;
    int32_t dataOffset; // 指出图像数据在文件中的起始偏移位置，即从文件开头到实际图像数据开始的字节数。
} __attribute__((packed));

// 优化为更具描述性的命名，代表 BMP 信息头
struct BMPInfoHeader
{
    int32_t headerSize;  // 表示该信息头结构体本身的大小，对于标准的 BMP 信息头，这个值通常是 40 字节（sizeof(struct BMPInfoHeader) 在这种情况下应为 40）。
    int32_t imageWidth;  // 明确表示是图像的宽度, 以像素为单位。
    int32_t imageHeight; // 明确表示是图像的高度, 以像素为单位。
    int16_t colorPlanes; // 颜色平面数，对于真彩色图像，通常设置为 1
    int16_t bitDepth;    // 色深，每个像素的位数，常见的值有 1（单色）、4（16 色）、8（256 色）、16（高彩色）、24（真彩色）、32（带透明度的真彩色）
    int32_t compressionMethod; // 指定图像的压缩方法，常见的值为 0（不压缩）。
    int32_t imageDataSize; // 存储图像数据的大小，以字节为单位。如果图像未压缩，它等于图像的宽度乘以高度乘以每个像素的字节数
    int32_t horizontalResolution; // 明确表示是水平分辨率，以像素 / 米为单位
    int32_t verticalResolution;   // 明确表示是垂直分辨率，以像素 / 米为单位
    int32_t colorsUsed;           // 表示图像中实际使用的颜色数。如果为 0，则表示使用了该色深下的所有颜色
    int32_t importantColors;      // 表示对图像显示重要的颜色数。如果为 0，则表示所有颜色都重要
} __attribute__((packed));



bool ShowPhoto(const char *filename);
void ShowAllPhotoInDir(const char *Dirname,int interval, int nLoopCnt = 1);


void DisplayJPG(const char *filename);
char *Readjpg(char const *filename, int size);
void DisplayBMP(const char *filename);


void CaptureLCDToFile(const char *filename);

#endif